/**
 * 验证车牌号是否合法
 * @param val 需要验证的车牌号
 * @returns boolean
 */
export const verifyCarNum = (val: string) => {
  // 使用正则表达式验证车牌号是否合法
  if (
    !/^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(
      val
    )
  ) {
    // 如果不合法，返回false
    return false
  }
  // 如果合法，返回true
  return true
}

/**
 * 验证手机号是否合法
 * @param val 验证的字符串
 * @returns boolean
 */
export const verifyPostalCode = (val: string) => /^[0-9][0-9]{5}$/.test(val)

/**
 * 验证中文全名是否合法
 * @param val 验证的字符串
 * @returns boolean
 */
export const verifyFullName = (val: string) =>
  /^[\u4e00-\u9fa5]{1,6}(.[\u4e00-\u9fa5]{1,6}){0,2}$/.test(val)

/**
 * 验证身份证号是否合法
 * @param val 需要验证的身份证号
 * @returns boolean
 */
export const verifyIdCard = (val: string) =>
  /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
    val
  )

/**
 * 验证手机号是否合法
 * @param val 需要验证的字符串
 * @returns
 */
export const verifyPhone = (val: string) =>
  /^((12[0-9])|(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/.test(
    val
  )

/**
 * 验证固定电话是否合法
 * @param val 需要验证的字符串
 * @returns
 */
export const verifyTelephone = (val: string) =>
  /^(0\d{2,3}-)?[1-9]\d{6,7}(-\d{1,4})?$/.test(val)

/**
 * 验证密码的强度
 * @param val 需要验证的字符串
 * @returns
 */
export function verifyPasswordStrength(val: string) {
  let result = ''
  if (/^(?:\d+|[a-zA-Z]+|[!@#$%^&\\.*]+){6,16}$/.test(val)) {
    result = '弱'
  }
  if (
    /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&\\.*]+$)[a-zA-Z\d!@#$%^&\\.*]{6,16}$/.test(
      val
    )
  ) {
    result = '中'
  }
  if (
    /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&\\.*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&\\.*]+$)(?![\d!@#$%^&\\.*]+$)[a-zA-Z\d!@#$%^&\\.*]{6,16}$/.test(
      val
    )
  ) {
    result = '强'
  }
  return result
}

/**
 * 验证邮箱是否合法
 * @param val 需要验证的字符串
 * @returns
 */
export const verifyEmail = (val: string) =>
  /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
    val
  )

/**
 * 用于生成指定长度的随机字符串
 * @param len 需要生成的随机字符串的长度
 * @returns
 */
export function getRandomString(len: number): string {
  // 如果长度小于等于11，则生成一个随机字符串，长度为len，不足的部分用0填充
  return len <= 11
    ? Math.random()
        .toString(36)
        .substring(2, 2 + len)
        .padEnd(len, '0')
    : // 如果长度大于11，则递归调用getRandomString函数，生成两个长度分别为11和len-11的随机字符串，并拼接起来
      getRandomString(11) + getRandomString(len - 11)
}

/**
 * 用于生成随机颜色
 * @returns
 */
export function getRandomColor() {
  // 生成一个随机数，并将其转换为16进制字符串
  return '#' + Math.random().toString(16).substring(2, 8).padEnd(6, '0')
}

/**
 * 交替合并两个字符串
 * @param str1 字符串1
 * @param str2 字符串2
 * @returns
 */
export function mergeAlternately(str1: string, str2: string) {
  let index = 0
  const result: string[] = []
  while (str1[index] && str2[index]) {
    result.push(str1[index])
    result.push(str2[index])
    index++
  }
  result.push(str1.substring(index))
  result.push(str2.substring(index))
  return result.join('')
}
